// GlobalArray.h
#ifndef GLOBALARRAY_H
#define GLOBALARRAY_H

#include <QVector>
#include <QObject>
#include <QDebug>

class GlobalArray : public QObject
{
    Q_OBJECT

public:
    // 获取全局数组实例
    static GlobalArray& getInstance() {
        static GlobalArray instance;
        return instance;
    }

    // 设置全局二维数组
    void setArray(QString str) {
        int length = str.length();
        QString str_mid = str.mid(20, length);
        // 去除空格和换行符
        QString cleanedstr = str_mid;
        cleanedstr.remove(' ').remove('n').remove('\\').remove('"');
        cleanedstr.remove('{').remove('}').remove('[').remove(']').remove('(').remove(')');

        //qDebug() << cleanedstr;

        // 按逗号分割字符串
        QStringList numbers = cleanedstr.split(',');
        // 创建一个二维 QVector
        QVector<QVector<int>> array;
        // 将数字添加到二维 QVector 中
        QVector<int> row;
        for (int i = 0; i < numbers.size(); ++i) {
            // 将字符串转换为整数
            bool conversionOk;
            int number = numbers[i].toInt(&conversionOk);
            if (conversionOk) {
                // 添加到当前行
                row.append(number);
                // 每行八个元素，添加到二维 QVector
                if (row.size() == 8) {
                    array.append(row);
                    row.clear();
                }
            }
        }
        myArray = array;
    }

    // 获取全局二维数组
    QVector<QVector<int>>& getArray() {
        return myArray;
    }

    //判断鼠标位置是否位于文本框中
    QVector<int> isTextIn(int x, int y){
        QVector<int> emptyVector; // 创建一个空的 QVector
        if (myArray.isEmpty())
            qDebug() << "please wait the process of ocr";
        else
        {
            for (const QVector<int>& row : this->myArray) {
                int startX = std::min(row[0],row[4]);
                int endX = std::max(row[2],row[6]);
                int startY = std::min(row[1],row[3]);
                int endY = std::max(row[5],row[7]);
                if (x >= startX && x <= endX && y >= startY && y <= endY) {
                    // 鼠标点击处位于文字块中
                    //qDebug() << "yes";
                    return row;
                }
            }
        }
        // 鼠标点击处不在任何文字块中
        return emptyVector;
}

private:
    // 私有构造函数，防止外部创建实例
    GlobalArray() {}

    QVector<QVector<int>> myArray;
};

#endif // GLOBALARRAY_H
